#ifndef __DRIVERS_GPIO_BAT32G157_H__
#define __DRIVERS_GPIO_BAT32G157_H__

//#include <platform/platform.h>
#include "BAT32G157.h"

#define PLATFORM_GPIO_GROUP_NUM  4
#define CONFIG_PLATFORM_GPIO_IRQ
#define KR0_CHAN ((uint8_t)(1<<0))
#define KR1_CHAN ((uint8_t)(1<<1)) 
#define KR2_CHAN ((uint8_t)(1<<2))
#define KR3_CHAN ((uint8_t)(1<<3))
#define KR4_CHAN ((uint8_t)(1<<4))
#define KR5_CHAN ((uint8_t)(1<<5))
#define KR6_CHAN ((uint8_t)(1<<6)) 
#define KR7_CHAN ((uint8_t)(1<<7))

typedef struct _InsDrv_Gpio_Group_Config_s {
    struct {
        uint8_t port;
        uint8_t direction;//0:output,1:input
        uint8_t mask;//0:pin unused,1:used
        uint8_t data;//data register
        uint8_t pull_down;//0:invalid, 1:pull down vaild
        uint8_t pull_up;//0:invalid, 1:pull up vaild
        uint8_t output_mode;//0:output-pp, 1:output-opendrain
        uint8_t mode_ctrl;//0-digital input or output, 1-analog input
    } pin_group[PLATFORM_GPIO_GROUP_NUM];
} InsDrv_Gpio_Group_Config_t;

typedef enum _InsDrv_Gpio_Port_e
{
    INSDRV_GPIO_PORTA = 0,
    INSDRV_GPIO_PORTB = 1,
    INSDRV_GPIO_PORTC = 2,
    INSDRV_GPIO_PORTD = 3,
    INSDRV_GPIO_PORTE = 4,//not used
    INSDRV_GPIO_PORTF = 5,
    INSDRV_GPIO_PORTG = 6,
    INSDRV_GPIO_PORTH = 7,
    INSDRV_GPIO_PORTI = 12,
    INSDRV_GPIO_PORTJ = 13,
    INSDRV_GPIO_PORTK = 14,

    INSDRV_GPIO_PORT_NUM,//INSDRV_GPIO_GROUP_NUM = 11
}InsDrv_Gpio_Port_e;

typedef enum _InsDrv_Gpio_Pin_e
{
    INSDRV_GPIO_PIN_0 = 0,
    INSDRV_GPIO_PIN_1,
    INSDRV_GPIO_PIN_2,
    INSDRV_GPIO_PIN_3,
    INSDRV_GPIO_PIN_4,
    INSDRV_GPIO_PIN_5,
    INSDRV_GPIO_PIN_6,
    INSDRV_GPIO_PIN_7,
    INSDRV_GPIO_PIN_8,
    INSDRV_GPIO_PIN_9,
    INSDRV_GPIO_PIN_10,
    INSDRV_GPIO_PIN_11,
    INSDRV_GPIO_PIN_12,
    INSDRV_GPIO_PIN_13,
    INSDRV_GPIO_PIN_14,
    INSDRV_GPIO_PIN_15,

    INSDRV_GPIO_PIN_NUMS,
}InsDrv_Gpio_Pin_e;

typedef enum _InsDrv_Gpio_EInt_Num_e
{
    INSDRV_GPIO_EINT0 = 0U,
    INSDRV_GPIO_EINT1,
    INSDRV_GPIO_EINT2,
    INSDRV_GPIO_EINT3,
	INSDRV_GPIO_EINT4,
    INSDRV_GPIO_EINT5,
    INSDRV_GPIO_EINT6,
    INSDRV_GPIO_EINT7,
    INSDRV_GPIO_EINT8,
    INSDRV_GPIO_EINT9,
    INSDRV_GPIO_EINT10,
    INSDRV_GPIO_EINT11,

    INSDRV_GPIO_EINT_NUM,
}InsDrv_Gpio_EInt_Num_e;

typedef enum _InsDrv_Gpio_IntType_e
{
	INSDRV_GPIO_INT_NONE = 0,
	INSDRV_GPIO_INT_FALLING,
	INSDRV_GPIO_INT_RISING,
	INSDRV_GPIO_INT_BOTH,

    INSDRV_GPIO_INT_NUM,
}InsDrv_Gpio_IntType_e;

#endif

